<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>天气案例_深度监视</title>
    <!-- 引用开发版 -->
    <script type="text/javascript" src="../js/vue.js"></script>
</head>

<body>
    <!--
    深度监视：
        1.vue中的watch默认不监视对象内部值的改变（一层）
        2.配置deep:true后可以检测对象内部值的改变（多层）

    备注：
        1.vue自身可以检测对象内部值的改变，但vue提供的watch默认不支持
        2.使用watch时根据数据的具体结构，决定是否采用深度检测
     -->
    <!-- 准备一个容器 -->
    <div id="root">
        <h2>今天天气很{{info}}</h2>
        <button @click="changeWeater">切换天气</button>
        <hr/>
        <h3>a的值是:{{numbers.a}}</h3>
        <button @click="numbers.a++">点我a+1</button>
        <h3>b的值是:{{numbers.b}}</h3>
        <button @click="numbers.b++">点我b+1</button>
    </div>

    <script type="text/javascript">
        Vue.config.productionTip = false

        const vm = new Vue({
            el: '#root',
            data: {
                isHot: true,
                numbers: {
                    a:1,
                    b:1
                }
            },
            computed: {
                info() {
                    return this.isHot ? '炎热' : '凉爽'
                }
            },
            methods: {
                changeWeater() {
                    this.isHot = !this.isHot
                }
            },
            watch: {
                isHot: {
                    handler(newValue, oldValue) {
                        console.log('isHot被修改了', newValue, oldValue)
                    }
                },
                // 监视多级结构中某个属性的变化
                'numbers.a': {
                    handler() {
                        console.log('a被改变了')
                    }
                },
                 // 监视多级结构中所有任意属性的变化
                numbers: {
                    deep:true,
                    handler() {
                        console.log('numbers被改变了')
                    }
                }
            }
        })
    </script>
</body>

</html